package fiuba.algo3.algoThieft.vista;


import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import fiuba.algo3.algoThieft.controlador.Controlador;
import fiuba.algo3.algoThieft.modelo.ErrorNoSeInicioUnNuevoCaso;
import fiuba.algo3.algoThieft.modelo.Interpol;
import fiuba.algo3.algoThieft.modelo.Juego;
import fiuba.algo3.algoThieft.modelo.PersonajePolicial;

public class VistaDeVentana implements Observador {

	
	
	
	private Juego modelo;
		
	private VentanaInicio ventanaInicial;
	private VentanaCaso ventanaCaso;
	private Controlador control;

	public VistaDeVentana(Juego modelo, Controlador control) {
		
		this.ventanaInicial = new VentanaInicio( modelo , control);		
		this.ventanaCaso = new VentanaCaso( modelo , control);
		
		this.ventanaInicial.mostrar();
		
		this.control = control;
		this.modelo = modelo;
		this.modelo.agregarObservador( this );
	}

	
	
	//Clase auxiliar para escuchar el evento de cerrado de la ventana
		
	public static class CloseListener extends WindowAdapter	
	{	public void windowClosing(WindowEvent e)
	{	e.getWindow().setVisible(false);
	System.exit(0);
	}
	}
	
	
	@Override
	public void actualizar() {
		
		if (ventanaCaso == null){
			// si es null es porque ya termino un caso
			// entonces le pregunto si quiere otro caso
			new DialogSiNo( new Frame(), "AlgoThief", "Estas listo para un nuevo caso" , control.getListenerDialogoNuevoCaso() );
			ventanaCaso = new VentanaCaso( modelo , control);
			try {
				ventanaCaso.iniciar();
			} catch (ErrorNoSeInicioUnNuevoCaso e) {
				control.noSeInicioCaso();
			}
		}
		int caso = this.modelo.estadoDeLaInvestigacion();
		
		switch ( caso ){
		
		case Interpol.ESTADO_INVALIDO:
			ventanaInicial.verificarContenidoDelCampoDeTexto();
			break;
					
		case Interpol.ESTADO_VALIDO:
			if ( ventanaInicial.esVisible() ){
				this.ventanaInicial.ocultar();
				PersonajePolicial personaje = this.modelo.getPersonajeActual();
				new DialogMensaje(new Frame(), "Bienvenido " + personaje.getNombre(), "Tu rango actual es " + personaje.rangoComoString());								
				
				this.ventanaCaso.mostrar();
				try {
					this.ventanaCaso.iniciar();
				} catch (ErrorNoSeInicioUnNuevoCaso e) {
					control.noSeInicioCaso();
					
				}
			}
			if ( ! ventanaCaso.esVisible()){
				ventanaCaso.mostrar();	
			}
			ventanaCaso.actualizarInformacion();
			
			break;
		
		case Interpol.TIEMPO_AGOTADO:
			new DialogMensaje(new Frame() ,"El caso termino", "Has tardado demasiado" , "El ladron ha escapado" );
			ventanaCaso.cerrar();
			ventanaCaso = null;					
			break;
				
		case Interpol.ORDEN_ARRESTO_INCORRECTA:	
			new DialogMensaje(new Frame() ,"El caso termino", "La interpol no pudo capturar al ladron" , "La orden de arresto es incorrecta" );
			ventanaCaso.cerrar();
			ventanaCaso = null;
			break;
					
		case Interpol.LADRON_ATRAPADO:
			new DialogMensaje(new Frame() ,"El caso termino", "Felicitaciones!!!" , "Gracias a tu ayuda la interpol pudo atrapar al ladron" );
			ventanaCaso.cerrar();
			ventanaCaso = null;
			break;		     
	
		}
				
	}
		

}
		



